﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using ITProject.Domain.Entities;
using ITProject.Domain;
using ITProject.Repository.Abstract;

namespace ITProject.WebUI.Models.Account
{
    /// <summary>
    /// Autor:Natalia Wyczislok
    /// Model Profilu użytkownika.
    /// </summary>
    public class UserProfilViewModel
    {
        [Required]
        [Display(Name = "Imię")]
        [MaxLength(30, ErrorMessage="Za dlugie imię")]
        public string FirstName { get; set; }
        [Required]
        [Display(Name = "Login")]
        [MaxLength(20, ErrorMessage = "Za dlugi login")]
        public string Loginn { get; set; }
        [Required]
        [Display(Name = "Naziwsko")]
        [MaxLength(30, ErrorMessage = "Za dlugie nazwisko")]
        public string LastName { get; set; }
        [Required]
        [Display(Name = "Data urodzenia")]
        [DataType(DataType.Date)]
        public DateTime BirthDate { get; set; }
        [Required]
        [Display(Name = "Email")]
        [MaxLength(30, ErrorMessage = "Za dlugi adres email")]
        [RegularExpression(@"^[_A-Za-z0-9-]+@[A-Za-z0-9]+.[A-Za-z0-9]{2,}", ErrorMessage = "Zły format adresu email")]
        public string Email { get; set; }
        
        [Display(Name = "Awatar")]
        public string Avatar { get; set; }
       
        [Display(Name = "Zainteresowania")]
        [MaxLength(600, ErrorMessage = "Pole \"Zainteresowania\" może mieć maksymalnie 600 znaków")]
        public string Interest { get; set; }
        [Display(Name = "O Sobie")]
        [MaxLength(600, ErrorMessage = "Pole \"O sobie\" może mieć maksymalnie 600 znaków")]
        public string About { get; set; }
        [Display(Name = "Doświadczenie")]
        [MaxLength(600, ErrorMessage = "Pole \"Doświadczenie\" może mieć maksymalnie 600 znaków")]
        public string Experience { get; set; }
        [Display(Name = "Umiejętności")]
        [MaxLength(600, ErrorMessage = "Pole \"Umiejętności\" może mieć maksymalnie 600 znaków")]
        public string Skills { get; set; }
        [Display(Name = "Kraj")]
        [MaxLength(20, ErrorMessage = "Nazwa kraju może składać się z maksymalnie 20 znaków")]
        public string Country { get; set; }
        [Display(Name = "Miasto")]
        [MaxLength(30, ErrorMessage = "Nazwa miasta może składać się z maksymalnie 20 znaków")]
        public string City { get; set; }
        [Display(Name = "Stan")]
        public string State { get; set; }
        [Display(Name = "Rola")]
        public string Role { get; set; }
        [Display(Name = "Data Rejestracji")]
        public DateTime RegisterDate { get; set; }
        [Display(Name = "Ostatnia wizyta")]
        public DateTime? LastVisit { get; set; }

        public List<string> UserProjekt { get; set; }
        public List<string> SuperProjekt { get; set; }
        /// <summary>
        /// Autor: Natalia Wyczislok
        /// Statyczna metoda która dokonuje konwersji encji User oraz Profil na model Profilu użytkownika
        /// </summary>
        /// <param name="u">krotka w encji User</param>
        /// <param name="p">krotka w endji Profil</param>
        /// <param name="userRepo">repozytorium użytkownika</param>
        /// <returns>Instancja modelu profilu</returns>
        public static UserProfilViewModel Convert(User u, Profil p, IUserRepository userRepo, List<string> userproj, List<string> superproj)
        {
            UserProfilViewModel UPvm=new UserProfilViewModel();
            UPvm.BirthDate = u.BirthDate;
            UPvm.Email = u.Email;
            UPvm.FirstName = u.FirstName;
            UPvm.LastName = u.LastName;
            UPvm.LastVisit = u.LastVisit;
            UPvm.Loginn = u.Login;
            UPvm.RegisterDate = u.RegisterDate;

            UPvm.Role = userRepo.GetUserRole(u.Role).ToString();
            UPvm.State = userRepo.GetUserState(u.State).ToString() ;
            if (p != null)
            {
                UPvm.Skills = p.Skills != null ? p.Skills : "brak informacji";
                UPvm.Interest = p.Interest != null ? p.Interest : "brak informacji";
                UPvm.Experience = p.Experience != null ? p.Experience : "brak informacji";
                UPvm.Country = p.Country != null ? p.Country : "brak informacji";
                UPvm.City = p.City != null ? p.City : "brak informacji";
                UPvm.Avatar = p.AvatarPath != null ? p.AvatarPath : u.Sex == "K" ? "AvatarW.png" : "AvatarM.png";
                UPvm.About = p.About != null ? p.About : "brak informacji";
            }
            else
            {
                UPvm.Skills = "brak informacji";
                UPvm.Interest = "brak informacji";
                UPvm.Experience = "brak informacji";
                UPvm.Country = "brak informacji";
                UPvm.City = "brak informacji";
                UPvm.Avatar = u.Sex=="K"?"AvatarW.png":"AvatarM.png";
                UPvm.About = "brak informacji";
            }
            UPvm.UserProjekt = userproj;
            UPvm.SuperProjekt = superproj;
            return UPvm;
        }
    }
}